// Copyright (c) 2019-2025 Provable Inc.
// This file is part of the snarkVM library.

// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:

// http://www.apache.org/licenses/LICENSE-2.0

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use crate::synthesis::helpers::{PuzzleDestination, PuzzleInstructionType, PuzzleOperand};
use console::{
    prelude::Zero,
    program::{Field, Literal, LiteralType, Network},
    types::{I8, I16, I32, I64, I128, U8, U16, U32, U64, U128},
};

type Instruction = PuzzleInstructionType;
type Operand<N> = PuzzleOperand<N>;
type Destination = PuzzleDestination;

/// A type alias for the instruction set.
/// The instruction set is a vector of tuples, where each tuple contains:
/// - A vector of tuples, where each tuple contains:
///    - The instruction.
///    - The operands.
///    - The destination types.
/// - The sampling weight of the instruction set.
pub type InstructionSet<N> = Vec<(Vec<(Instruction, Vec<Operand<N>>, Vec<Destination>)>, u16)>;

// TODO: ultimately we can replace variables with constants and remove the non_snake_case
#[rustfmt::skip]
pub fn instruction_set<N: Network>() -> InstructionSet<N> {
    // Initialize constants for the instruction weights.
    const DEFAULT: u16 = 512;
    const DEFAULT_BOOLEAN: u16 = 4;
    const DEFAULT_U8: u16 = 4;
    const DEFAULT_U16: u16 = 256;
    const DEFAULT_U32: u16 = 512;
    const DEFAULT_U64: u16 = 512;
    const DEFAULT_U128: u16 = 512;
    const DEFAULT_I8: u16 = 4;
    const DEFAULT_I16: u16 = 256;
    const DEFAULT_I32: u16 = 512;
    const DEFAULT_I64: u16 = 512;
    const DEFAULT_I128: u16 = 512;

    const NUM_CAST: u16 = 200;
    const NUM_POWER: u16 = 20;

    const VERY_LOW: u16 = 4;
    const LOW: u16 = 40;
    const MEDIUM_LOW: u16 = 128;

    const DIV_DIVIDER: u16 = 128;
    const U128_DIVIDER: u16 = 512;

    vec![
        // abs
        (vec![(Instruction::Abs, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::Abs, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::Abs, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::Abs, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::Abs, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        // abs.w
        (vec![(Instruction::AbsWrapped, vec![Operand::Register(LiteralType::I8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::AbsWrapped, vec![Operand::Register(LiteralType::I16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::AbsWrapped, vec![Operand::Register(LiteralType::I32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::AbsWrapped, vec![Operand::Register(LiteralType::I64)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::AbsWrapped, vec![Operand::Register(LiteralType::I128)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], LOW),
        // add
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], DEFAULT),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::Add, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // add.w
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], DEFAULT_I8),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], DEFAULT_I16),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], DEFAULT_I32),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], DEFAULT_I64),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], DEFAULT_I128),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], DEFAULT_U8),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], DEFAULT_U16),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], DEFAULT_U32),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], DEFAULT_U64),
        (vec![(Instruction::AddWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], DEFAULT_U128),
        // and
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Ephemeral(LiteralType::Boolean, 0)])], DEFAULT_BOOLEAN),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], LOW),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::And, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], LOW),
        // assert.eq
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![])], 0),
        (vec![(Instruction::AssertEq, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![])], 0),
        // assert.neq
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![])], 0),
        (vec![(Instruction::AssertNeq, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![])], 0),
        // cast
        (vec![(Instruction::Cast, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::Cast, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::Cast, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::Cast, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::Cast, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // cast.lossy
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], NUM_CAST),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)]),
              (Instruction::CastLossy, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], NUM_CAST),
        // div
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::Field), Operand::Literal(Literal::Field(Field::zero()))], vec![Destination::Ephemeral(LiteralType::Boolean, 0)]),
              (Instruction::Ternary, vec![Operand::Ephemeral(LiteralType::Boolean, 0), Operand::Input(LiteralType::Field, 0), Operand::Register(LiteralType::Field)], vec![Destination::Ephemeral(LiteralType::Field, 1)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::Field, 1), Operand::Ephemeral(LiteralType::Field, 1)], vec![Destination::Register(LiteralType::Field)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I8), Operand::Literal(Literal::I8(I8::new(1)))], vec![Destination::Ephemeral(LiteralType::I8, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::I8, 1), Operand::Ephemeral(LiteralType::I8, 0)], vec![Destination::Ephemeral(LiteralType::I8, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I16), Operand::Literal(Literal::I16(I16::new(1)))], vec![Destination::Ephemeral(LiteralType::I16, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::I16, 1), Operand::Ephemeral(LiteralType::I16, 0)], vec![Destination::Ephemeral(LiteralType::I16, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I32), Operand::Literal(Literal::I32(I32::new(1)))], vec![Destination::Ephemeral(LiteralType::I32, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::I32, 1), Operand::Ephemeral(LiteralType::I32, 0)], vec![Destination::Ephemeral(LiteralType::I32, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I64), Operand::Literal(Literal::I64(I64::new(1)))], vec![Destination::Ephemeral(LiteralType::I64, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::I64, 1), Operand::Ephemeral(LiteralType::I64, 0)], vec![Destination::Ephemeral(LiteralType::I64, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I128), Operand::Literal(Literal::I128(I128::new(1)))], vec![Destination::Ephemeral(LiteralType::I128, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::I128, 1), Operand::Ephemeral(LiteralType::I128, 0)], vec![Destination::Ephemeral(LiteralType::I128, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U8), Operand::Literal(Literal::U8(U8::new(1)))], vec![Destination::Ephemeral(LiteralType::U8, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::U8, 1), Operand::Ephemeral(LiteralType::U8, 0)], vec![Destination::Ephemeral(LiteralType::U8, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U16), Operand::Literal(Literal::U16(U16::new(1)))], vec![Destination::Ephemeral(LiteralType::U16, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::U16, 1), Operand::Ephemeral(LiteralType::U16, 0)], vec![Destination::Ephemeral(LiteralType::U16, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U32), Operand::Literal(Literal::U32(U32::new(1)))], vec![Destination::Ephemeral(LiteralType::U32, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::U32, 1), Operand::Ephemeral(LiteralType::U32, 0)], vec![Destination::Ephemeral(LiteralType::U32, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U64), Operand::Literal(Literal::U64(U64::new(1)))], vec![Destination::Ephemeral(LiteralType::U64, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::U64, 1), Operand::Ephemeral(LiteralType::U64, 0)], vec![Destination::Ephemeral(LiteralType::U64, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U128), Operand::Literal(Literal::U128(U128::new(1)))], vec![Destination::Ephemeral(LiteralType::U128, 0)]),
              (Instruction::Div, vec![Operand::RegisterOffset(LiteralType::U128, 1), Operand::Ephemeral(LiteralType::U128, 0)], vec![Destination::Ephemeral(LiteralType::U128, 1)])], 0),
        // div.w
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I8), Operand::Literal(Literal::I8(I8::new(1)))], vec![Destination::Ephemeral(LiteralType::I8, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::I8, 1), Operand::Ephemeral(LiteralType::I8, 0)], vec![Destination::Ephemeral(LiteralType::I8, 1)])], 1),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I16), Operand::Literal(Literal::I16(I16::new(1)))], vec![Destination::Ephemeral(LiteralType::I16, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::I16, 1), Operand::Ephemeral(LiteralType::I16, 0)], vec![Destination::Ephemeral(LiteralType::I16, 1)])], DEFAULT_I16 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I32), Operand::Literal(Literal::I32(I32::new(1)))], vec![Destination::Ephemeral(LiteralType::I32, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::I32, 1), Operand::Ephemeral(LiteralType::I32, 0)], vec![Destination::Ephemeral(LiteralType::I32, 1)])], DEFAULT_I32 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I64), Operand::Literal(Literal::I64(I64::new(1)))], vec![Destination::Ephemeral(LiteralType::I64, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::I64, 1), Operand::Ephemeral(LiteralType::I64, 0)], vec![Destination::Ephemeral(LiteralType::I64, 1)])], DEFAULT_I64 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I128), Operand::Literal(Literal::I128(I128::new(1)))], vec![Destination::Ephemeral(LiteralType::I128, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::I128, 1), Operand::Ephemeral(LiteralType::I128, 0)], vec![Destination::Ephemeral(LiteralType::I128, 1)])], DEFAULT_I128 / U128_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U8), Operand::Literal(Literal::U8(U8::new(1)))], vec![Destination::Ephemeral(LiteralType::U8, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::U8, 1), Operand::Ephemeral(LiteralType::U8, 0)], vec![Destination::Ephemeral(LiteralType::U8, 1)])], 1),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U16), Operand::Literal(Literal::U16(U16::new(1)))], vec![Destination::Ephemeral(LiteralType::U16, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::U16, 1), Operand::Ephemeral(LiteralType::U16, 0)], vec![Destination::Ephemeral(LiteralType::U16, 1)])], DEFAULT_U16 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U32), Operand::Literal(Literal::U32(U32::new(1)))], vec![Destination::Ephemeral(LiteralType::U32, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::U32, 1), Operand::Ephemeral(LiteralType::U32, 0)], vec![Destination::Ephemeral(LiteralType::U32, 1)])], DEFAULT_U32 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U64), Operand::Literal(Literal::U64(U64::new(1)))], vec![Destination::Ephemeral(LiteralType::U64, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::U64, 1), Operand::Ephemeral(LiteralType::U64, 0)], vec![Destination::Ephemeral(LiteralType::U64, 1)])], DEFAULT_U64 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U128), Operand::Literal(Literal::U128(U128::new(1)))], vec![Destination::Ephemeral(LiteralType::U128, 0)]),
              (Instruction::DivWrapped, vec![Operand::RegisterOffset(LiteralType::U128, 1), Operand::Ephemeral(LiteralType::U128, 0)], vec![Destination::Ephemeral(LiteralType::U128, 1)])], DEFAULT_U128 / U128_DIVIDER),
        // double
        (vec![(Instruction::Double, vec![Operand::Register(LiteralType::Field)], vec![Destination::Ephemeral(LiteralType::Field, 0)])], 0),
        // gt
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_I8),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_U8),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gt, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        // gte
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_I8),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_U8),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Gte, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        // hash.bhp256
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 1),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 1),
        // hash.bhp512
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.bhp768
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp768, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.bhp1024
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashBhp1024, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.keccak256
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.keccak384
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.keccak512
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashKeccak512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.ped64
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 1),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 1),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 1),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 1),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 1),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 1),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed64, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.ped128
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPed128, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.psd2
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd2, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.psd4
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd4, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.psd8
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashPsd8, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.sha3_256
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3256, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.sha3_384
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3384, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // hash.sha3_512
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Field)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::HashSha3512, vec![Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // inv
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::Field), Operand::Literal(Literal::Field(Field::zero()))], vec![Destination::Ephemeral(LiteralType::Boolean, 0)]),
              (Instruction::Ternary, vec![Operand::Ephemeral(LiteralType::Boolean, 0), Operand::Input(LiteralType::Field, 0), Operand::Register(LiteralType::Field)], vec![Destination::Ephemeral(LiteralType::Field, 1)]),
              (Instruction::Inv, vec![Operand::Ephemeral(LiteralType::Field, 1)], vec![Destination::Register(LiteralType::Field)])], VERY_LOW),
        // is.eq
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_BOOLEAN),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_I8),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_U8),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsEq, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        // is.neq
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        (vec![(Instruction::IsNeq, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], VERY_LOW),
        // lt
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_I8),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_U8),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lt, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        // lte
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_I8),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_U8),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        (vec![(Instruction::Lte, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::Boolean)])], MEDIUM_LOW),
        // mod
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U8), Operand::Literal(Literal::U8(U8::new(1)))], vec![Destination::Ephemeral(LiteralType::U8, 0)]),
              (Instruction::Mod, vec![Operand::RegisterOffset(LiteralType::U8, 1), Operand::Ephemeral(LiteralType::U8, 0)], vec![Destination::Ephemeral(LiteralType::U8, 1)])], 1),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U16), Operand::Literal(Literal::U16(U16::new(1)))], vec![Destination::Ephemeral(LiteralType::U16, 0)]),
              (Instruction::Mod, vec![Operand::RegisterOffset(LiteralType::U16, 1), Operand::Ephemeral(LiteralType::U16, 0)], vec![Destination::Ephemeral(LiteralType::U16, 1)])], DEFAULT_U16 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U32), Operand::Literal(Literal::U32(U32::new(1)))], vec![Destination::Ephemeral(LiteralType::U32, 0)]),
              (Instruction::Mod, vec![Operand::RegisterOffset(LiteralType::U32, 1), Operand::Ephemeral(LiteralType::U32, 0)], vec![Destination::Ephemeral(LiteralType::U32, 1)])], DEFAULT_U32 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U64), Operand::Literal(Literal::U64(U64::new(1)))], vec![Destination::Ephemeral(LiteralType::U64, 0)]),
              (Instruction::Mod, vec![Operand::RegisterOffset(LiteralType::U64, 1), Operand::Ephemeral(LiteralType::U64, 0)], vec![Destination::Ephemeral(LiteralType::U64, 1)])], DEFAULT_U64 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U128), Operand::Literal(Literal::U128(U128::new(1)))], vec![Destination::Ephemeral(LiteralType::U128, 0)]),
              (Instruction::Mod, vec![Operand::RegisterOffset(LiteralType::U128, 1), Operand::Ephemeral(LiteralType::U128, 0)], vec![Destination::Ephemeral(LiteralType::U128, 1)])], DEFAULT_U128 / U128_DIVIDER),
        // mul
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], DEFAULT),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::Mul, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // mul.w
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], DEFAULT_I8),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], LOW),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], LOW),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], LOW),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], LOW),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], DEFAULT_U8),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], LOW),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], LOW),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], LOW),
        (vec![(Instruction::MulWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], LOW),
        // nand
        (vec![(Instruction::Nand, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_BOOLEAN),
        // neg
        (vec![(Instruction::Neg, vec![Operand::Register(LiteralType::Field)], vec![Destination::Ephemeral(LiteralType::Field, 0)])], 0),
        (vec![
            (Instruction::IsEq, vec![Operand::Register(LiteralType::I8), Operand::Literal(Literal::I8(I8::new(-128)))], vec![Destination::Register(LiteralType::Boolean)]),
            (Instruction::AddWrapped, vec![Operand::Register(LiteralType::I8), Operand::Literal(Literal::I8(I8::new(1)))], vec![Destination::Ephemeral(LiteralType::I8, 0)]),
            (Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Ephemeral(LiteralType::I8, 0), Operand::Register(LiteralType::I8)], vec![Destination::Ephemeral(LiteralType::I8, 1)]),
            (Instruction::Neg, vec![Operand::Ephemeral(LiteralType::I8, 1)], vec![Destination::Ephemeral(LiteralType::I8, 2)]),], DEFAULT_I8),
        (vec![
            (Instruction::IsEq, vec![Operand::Register(LiteralType::I16), Operand::Literal(Literal::I16(I16::new(-32768)))], vec![Destination::Register(LiteralType::Boolean)]),
            (Instruction::AddWrapped, vec![Operand::Register(LiteralType::I16), Operand::Literal(Literal::I16(I16::new(1)))], vec![Destination::Ephemeral(LiteralType::I16, 0)]),
            (Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Ephemeral(LiteralType::I16, 0), Operand::Register(LiteralType::I16)], vec![Destination::Ephemeral(LiteralType::I16, 1)]),
            (Instruction::Neg, vec![Operand::Ephemeral(LiteralType::I16, 1)], vec![Destination::Ephemeral(LiteralType::I16, 2)]),], DEFAULT_I16 / 2),
        (vec![
            (Instruction::IsEq, vec![Operand::Register(LiteralType::I32), Operand::Literal(Literal::I32(I32::new(-2147483648)))], vec![Destination::Register(LiteralType::Boolean)]),
            (Instruction::AddWrapped, vec![Operand::Register(LiteralType::I32), Operand::Literal(Literal::I32(I32::new(1)))], vec![Destination::Ephemeral(LiteralType::I32, 0)]),
            (Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Ephemeral(LiteralType::I32, 0), Operand::Register(LiteralType::I32)], vec![Destination::Ephemeral(LiteralType::I32, 1)]),
            (Instruction::Neg, vec![Operand::Ephemeral(LiteralType::I32, 1)], vec![Destination::Ephemeral(LiteralType::I32, 2)]),], DEFAULT_I32 / 2),
        (vec![
            (Instruction::IsEq, vec![Operand::Register(LiteralType::I64), Operand::Literal(Literal::I64(I64::new(-9223372036854775808)))], vec![Destination::Register(LiteralType::Boolean)]),
            (Instruction::AddWrapped, vec![Operand::Register(LiteralType::I64), Operand::Literal(Literal::I64(I64::new(1)))], vec![Destination::Ephemeral(LiteralType::I64, 0)]),
            (Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Ephemeral(LiteralType::I64, 0), Operand::Register(LiteralType::I64)], vec![Destination::Ephemeral(LiteralType::I64, 1)]),
            (Instruction::Neg, vec![Operand::Ephemeral(LiteralType::I64, 1)], vec![Destination::Ephemeral(LiteralType::I64, 2)]),], DEFAULT_I64 / 2),
        (vec![
            (Instruction::IsEq, vec![Operand::Register(LiteralType::I128), Operand::Literal(Literal::I128(I128::new(-170141183460469231731687303715884105728)))], vec![Destination::Register(LiteralType::Boolean)]),
            (Instruction::AddWrapped, vec![Operand::Register(LiteralType::I128), Operand::Literal(Literal::I128(I128::new(1)))], vec![Destination::Ephemeral(LiteralType::I128, 0)]),
            (Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Ephemeral(LiteralType::I128, 0), Operand::Register(LiteralType::I128)], vec![Destination::Ephemeral(LiteralType::I128, 1)]),
            (Instruction::Neg, vec![Operand::Ephemeral(LiteralType::I128, 1)], vec![Destination::Ephemeral(LiteralType::I128, 2)]),], DEFAULT_I128 / 2),
        // nor
        (vec![(Instruction::Nor, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_BOOLEAN),
        // not
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::Boolean)], vec![Destination::Ephemeral(LiteralType::Boolean, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::I8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::I16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::I32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::I64)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::I128)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::U64)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], VERY_LOW),
        (vec![(Instruction::Not, vec![Operand::Register(LiteralType::U128)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], VERY_LOW),
        // or
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Ephemeral(LiteralType::Boolean, 0)])], DEFAULT_BOOLEAN),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], VERY_LOW),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], VERY_LOW),
        // pow
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Register(LiteralType::Field)])], VERY_LOW),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        (vec![(Instruction::Pow, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        // pow.w
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], NUM_POWER),
        (vec![(Instruction::PowWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], NUM_POWER),
        // rem
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I8), Operand::Literal(Literal::I8(I8::new(1)))], vec![Destination::Ephemeral(LiteralType::I8, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::I8, 1), Operand::Ephemeral(LiteralType::I8, 0)], vec![Destination::Ephemeral(LiteralType::I8, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I16), Operand::Literal(Literal::I16(I16::new(1)))], vec![Destination::Ephemeral(LiteralType::I16, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::I16, 1), Operand::Ephemeral(LiteralType::I16, 0)], vec![Destination::Ephemeral(LiteralType::I16, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I32), Operand::Literal(Literal::I32(I32::new(1)))], vec![Destination::Ephemeral(LiteralType::I32, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::I32, 1), Operand::Ephemeral(LiteralType::I32, 0)], vec![Destination::Ephemeral(LiteralType::I32, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I64), Operand::Literal(Literal::I64(I64::new(1)))], vec![Destination::Ephemeral(LiteralType::I64, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::I64, 1), Operand::Ephemeral(LiteralType::I64, 0)], vec![Destination::Ephemeral(LiteralType::I64, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I128), Operand::Literal(Literal::I128(I128::new(1)))], vec![Destination::Ephemeral(LiteralType::I128, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::I128, 1), Operand::Ephemeral(LiteralType::I128, 0)], vec![Destination::Ephemeral(LiteralType::I128, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U8), Operand::Literal(Literal::U8(U8::new(1)))], vec![Destination::Ephemeral(LiteralType::U8, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::U8, 1), Operand::Ephemeral(LiteralType::U8, 0)], vec![Destination::Ephemeral(LiteralType::U8, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U16), Operand::Literal(Literal::U16(U16::new(1)))], vec![Destination::Ephemeral(LiteralType::U16, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::U16, 1), Operand::Ephemeral(LiteralType::U16, 0)], vec![Destination::Ephemeral(LiteralType::U16, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U32), Operand::Literal(Literal::U32(U32::new(1)))], vec![Destination::Ephemeral(LiteralType::U32, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::U32, 1), Operand::Ephemeral(LiteralType::U32, 0)], vec![Destination::Ephemeral(LiteralType::U32, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U64), Operand::Literal(Literal::U64(U64::new(1)))], vec![Destination::Ephemeral(LiteralType::U64, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::U64, 1), Operand::Ephemeral(LiteralType::U64, 0)], vec![Destination::Ephemeral(LiteralType::U64, 1)])], 0),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U128), Operand::Literal(Literal::U128(U128::new(1)))], vec![Destination::Ephemeral(LiteralType::U128, 0)]),
              (Instruction::Rem, vec![Operand::RegisterOffset(LiteralType::U128, 1), Operand::Ephemeral(LiteralType::U128, 0)], vec![Destination::Ephemeral(LiteralType::U128, 1)])], 0),
        // rem.w
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I8), Operand::Literal(Literal::I8(I8::new(1)))], vec![Destination::Ephemeral(LiteralType::I8, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::I8, 1), Operand::Ephemeral(LiteralType::I8, 0)], vec![Destination::Ephemeral(LiteralType::I8, 1)])], 1),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I16), Operand::Literal(Literal::I16(I16::new(1)))], vec![Destination::Ephemeral(LiteralType::I16, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::I16, 1), Operand::Ephemeral(LiteralType::I16, 0)], vec![Destination::Ephemeral(LiteralType::I16, 1)])], DEFAULT_I16 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I32), Operand::Literal(Literal::I32(I32::new(1)))], vec![Destination::Ephemeral(LiteralType::I32, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::I32, 1), Operand::Ephemeral(LiteralType::I32, 0)], vec![Destination::Ephemeral(LiteralType::I32, 1)])], DEFAULT_I32 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I64), Operand::Literal(Literal::I64(I64::new(1)))], vec![Destination::Ephemeral(LiteralType::I64, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::I64, 1), Operand::Ephemeral(LiteralType::I64, 0)], vec![Destination::Ephemeral(LiteralType::I64, 1)])], DEFAULT_I64 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::I128), Operand::Literal(Literal::I128(I128::new(1)))], vec![Destination::Ephemeral(LiteralType::I128, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::I128, 1), Operand::Ephemeral(LiteralType::I128, 0)], vec![Destination::Ephemeral(LiteralType::I128, 1)])], DEFAULT_I128 / U128_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U8), Operand::Literal(Literal::U8(U8::new(1)))], vec![Destination::Ephemeral(LiteralType::U8, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::U8, 1), Operand::Ephemeral(LiteralType::U8, 0)], vec![Destination::Ephemeral(LiteralType::U8, 1)])], 1),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U16), Operand::Literal(Literal::U16(U16::new(1)))], vec![Destination::Ephemeral(LiteralType::U16, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::U16, 1), Operand::Ephemeral(LiteralType::U16, 0)], vec![Destination::Ephemeral(LiteralType::U16, 1)])], DEFAULT_U16 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U32), Operand::Literal(Literal::U32(U32::new(1)))], vec![Destination::Ephemeral(LiteralType::U32, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::U32, 1), Operand::Ephemeral(LiteralType::U32, 0)], vec![Destination::Ephemeral(LiteralType::U32, 1)])], DEFAULT_U32 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U64), Operand::Literal(Literal::U64(U64::new(1)))], vec![Destination::Ephemeral(LiteralType::U64, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::U64, 1), Operand::Ephemeral(LiteralType::U64, 0)], vec![Destination::Ephemeral(LiteralType::U64, 1)])], DEFAULT_U64 / DIV_DIVIDER),
        (vec![(Instruction::Or, vec![Operand::Register(LiteralType::U128), Operand::Literal(Literal::U128(U128::new(1)))], vec![Destination::Ephemeral(LiteralType::U128, 0)]),
              (Instruction::RemWrapped, vec![Operand::RegisterOffset(LiteralType::U128, 1), Operand::Ephemeral(LiteralType::U128, 0)], vec![Destination::Ephemeral(LiteralType::U128, 1)])], DEFAULT_U128 / U128_DIVIDER),
        // shl
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        (vec![(Instruction::Shl, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        // shl.w
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], LOW),
        (vec![(Instruction::ShlWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], LOW),
        // shr
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        (vec![(Instruction::Shr, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], 0),
        // shr.w
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], VERY_LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], VERY_LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], VERY_LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], VERY_LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], VERY_LOW),
        (vec![(Instruction::ShrWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], VERY_LOW),
        // sqrt
        (vec![(Instruction::Sqrt, vec![Operand::Register(LiteralType::Field)], vec![Destination::Ephemeral(LiteralType::Field, 0)])], 0),
        // square
        (vec![(Instruction::Square, vec![Operand::RegisterOffset(LiteralType::Field, 1)], vec![Destination::Register(LiteralType::Field)])], 4 * DEFAULT),
        // sub
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::Field), Operand::Register(LiteralType::Field)], vec![Destination::Ephemeral(LiteralType::Field, 0)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], 0),
        (vec![(Instruction::Sub, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], 0),
        // sub.w
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], VERY_LOW),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], DEFAULT_I16/4),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], DEFAULT_I32/4),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], DEFAULT_I64/4),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], DEFAULT_I128/4),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], VERY_LOW),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], DEFAULT_U16/4),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], DEFAULT_U32/4),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], DEFAULT_U64/4),
        (vec![(Instruction::SubWrapped, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], DEFAULT_U128/4),
        // ternary
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Ephemeral(LiteralType::Boolean, 0)])], 0),
        (vec![(Instruction::IsEq, vec![Operand::RegisterOffset(LiteralType::Field, 1), Operand::Literal(Literal::Field(Field::zero()))], vec![Destination::Ephemeral(LiteralType::Boolean, 0)]),
              (Instruction::Ternary, vec![Operand::Ephemeral(LiteralType::Boolean, 0), Operand::Input(LiteralType::Field, 0), Operand::RegisterOffset(LiteralType::Field, 1)], vec![Destination::Register(LiteralType::Field)])], DEFAULT),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Group), Operand::Register(LiteralType::Group)], vec![Destination::Ephemeral(LiteralType::Group, 0)])], 0),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Ephemeral(LiteralType::I8, 0)])], DEFAULT_I8),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Ephemeral(LiteralType::I16, 0)])], LOW),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Ephemeral(LiteralType::I32, 0)])], LOW),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Ephemeral(LiteralType::I64, 0)])], LOW),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Ephemeral(LiteralType::I128, 0)])], LOW),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Ephemeral(LiteralType::U8, 0)])], DEFAULT_U8),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Ephemeral(LiteralType::U16, 0)])], LOW),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Ephemeral(LiteralType::U32, 0)])], LOW),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Ephemeral(LiteralType::U64, 0)])], LOW),
        (vec![(Instruction::Ternary, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Ephemeral(LiteralType::U128, 0)])], LOW),
        // xor
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::Boolean), Operand::Register(LiteralType::Boolean)], vec![Destination::Register(LiteralType::Boolean)])], DEFAULT_BOOLEAN),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::I8), Operand::Register(LiteralType::I8)], vec![Destination::Register(LiteralType::I8)])], DEFAULT_I8),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::I16), Operand::Register(LiteralType::I16)], vec![Destination::Register(LiteralType::I16)])], DEFAULT_I16),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::I32), Operand::Register(LiteralType::I32)], vec![Destination::Register(LiteralType::I32)])], DEFAULT_I32),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::I64), Operand::Register(LiteralType::I64)], vec![Destination::Register(LiteralType::I64)])], DEFAULT_I64),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::I128), Operand::Register(LiteralType::I128)], vec![Destination::Register(LiteralType::I128)])], DEFAULT_I128),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::U8), Operand::Register(LiteralType::U8)], vec![Destination::Register(LiteralType::U8)])], DEFAULT_U8),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::U16), Operand::Register(LiteralType::U16)], vec![Destination::Register(LiteralType::U16)])], DEFAULT_U16),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::U32), Operand::Register(LiteralType::U32)], vec![Destination::Register(LiteralType::U32)])], DEFAULT_U32),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::U64), Operand::Register(LiteralType::U64)], vec![Destination::Register(LiteralType::U64)])], DEFAULT_U64),
        (vec![(Instruction::Xor, vec![Operand::Register(LiteralType::U128), Operand::Register(LiteralType::U128)], vec![Destination::Register(LiteralType::U128)])], DEFAULT_U128),
    ]
}

#[cfg(test)]
mod test {
    use super::*;
    use crate::synthesis::helpers::NUM_SEQUENCE_INSTRUCTIONS;
    use std::collections::HashSet;

    type CurrentNetwork = console::network::MainnetV0;

    #[test]
    fn check_weights_are_valid() {
        // Get the instruction set.
        let instruction_set = instruction_set::<CurrentNetwork>();

        // Initialize the sum.
        let mut sum = 0u16;

        // Sum the weights together, checking that an overflow does not occur.
        for (_, weight) in instruction_set {
            let result = sum.checked_add(weight);
            assert!(result.is_some());
            sum = result.unwrap();
        }
    }

    #[test]
    fn check_ephemeral_registers_are_valid() {
        // Get the instruction set.
        let instruction_set = instruction_set::<CurrentNetwork>();

        // For each instruction sequence,
        //   - check that the ephemeral destination registers are sequentially increasing.
        //   - check that the ephemeral operands exist.
        for (sequence, _) in instruction_set {
            // Initialize the `next_expected_ephemeral_register`.
            let mut next_expected_ephemeral_register = 0u16;
            // Initialize the storage for the ephemeral registers seen thus far.
            let mut ephemeral_registers = HashSet::new();

            for (_, operands, destinations) in sequence {
                // First, process all of the operands in the sequence.
                for operand in operands {
                    // Check that the index of the ephemeral register exists.
                    if let PuzzleOperand::Ephemeral(_, index) = operand {
                        assert!(ephemeral_registers.contains(&index));
                    }
                }

                // Then, process all of the destination registers in the sequence.
                for destination in destinations {
                    // Check that the index of the destination register matches the expected one.
                    if let PuzzleDestination::Ephemeral(_, index) = destination {
                        assert_eq!(index, next_expected_ephemeral_register);
                        next_expected_ephemeral_register += 1;
                        ephemeral_registers.insert(index);
                    }
                }
            }
        }
    }

    #[test]
    fn check_register_offsets_are_valid() {
        // Get the instruction set.
        let instruction_set = instruction_set::<CurrentNetwork>();

        // For each instruction sequence, check that the register offsets do not exceed 1.
        for (sequence, _) in instruction_set {
            for (_, operands, _) in sequence {
                // Check each of the operands.
                for operand in operands {
                    // Check that the index of the ephemeral register exists.
                    if let PuzzleOperand::RegisterOffset(_, offset) = operand {
                        assert!(offset <= 1);
                    }
                }
            }
        }
    }

    #[test]
    fn check_that_instructions_are_valid() {
        // Get the instruction set.
        let instruction_set = instruction_set::<CurrentNetwork>();

        // Check that each instruction sequence is valid.
        for (sequence, _) in instruction_set {
            // Check that the sequence length does not exceed `NUM_SEQUENCE_INSTRUCTIONS`.
            assert!(sequence.len() <= NUM_SEQUENCE_INSTRUCTIONS);
            for (instruction, _, _) in sequence {
                // Check that the instruction is not a `branch`.
                assert!(!matches!(instruction, Instruction::BranchEq | Instruction::BranchNeq));
            }
        }
    }
}
